package com.dingwen.treasure.core.annotation;


import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * EasyCache
 *
 * @author dingwen
 * @date 2022/04/21
 */
@Documented
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface EasyCache {

    /**
     * key 过期时间单位
     *
     * @return {@link TimeUnit}
     */
    TimeUnit unit() default TimeUnit.SECONDS;

    /**
     * 过期时间，默认值6，即6秒内有效
     *
     * @return int
     */
    long time() default 6L;

    /**
     * 是否进行日志打印 </br>
     * <ol>
     *     <li>true（默认值）：打印 info、warn、err 即全部级别的日志信息</li>
     *     <li>false：仅仅打印 err 级别的日志信息</li>
     * </ol>>
     *
     * @return boolean
     */
    boolean printedLog() default true;

    /**
     * key参数：获取指定方法参数生成redis key <br>
     * <p>方法一致，参数一致，key未过期，则直接使用缓存(即上一次方法执行返回的结果)。</p>
     * <p>注意：</p>
     * <ol>
     *     <li>若参数未进行配置，则默认值为</li>
     * </ol>
     *
     * @return long
     */
    String[] keyParams() default {"#p"};


    /**
     * 方法返回值类型： 默认没有返回值即是void
     */
    Class returnType() default Void.class;

}
